package cuiyt.juc.bq;

import java.util.concurrent.SynchronousQueue;
import java.util.concurrent.TimeUnit;

/**
 * @author cyt
 * @create 2020-09-16 下午 3:08
 */
public class demo5 {
    /**
     * 同步队列
     * 没有容量，
     * 进去一个元素，必须等待取出来之后，才能再往里面放一个元素！
     *
     * @param args
     */
    public static void main(String[] args) throws InterruptedException {
        /**
         * 同步队列不存在容量的问题，它本身不存放元素，
         *
         * put值之后， 必须take取出， 否则就不能继续put元素, 就会一直等待take元素
         */
        SynchronousQueue<Object> queue = new SynchronousQueue<>();
        new Thread(() -> {
            try {
                System.out.println(Thread.currentThread().getName() + "-> put" + 1);
                queue.put(1);
                System.out.println(Thread.currentThread().getName() + "-> put" + 2);
                queue.put(2);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }, "a").start();

        new Thread(() -> {
            try {
                TimeUnit.SECONDS.sleep(3);
                System.out.println(Thread.currentThread().getName() + "-> take" + 1);
                queue.take();
                TimeUnit.SECONDS.sleep(3);
                System.out.println(Thread.currentThread().getName() + "-> take" + 2);
                queue.take();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }, "b").start();
    }
}
